//============================================================================
//Gios Pdf.NET - A library for exporting Pdf Documents in C#
//Copyright (C) 2005 Paolo Gios - www.paologios.com
//
//This library is free software; you can redistribute it and/or
//modify it under the terms of the GNU Lesser General Public
//License as published by the Free Software Foundation; either
//version 2.1 of the License, or (at your option) any later version.
//
//This library is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
//Lesser General Public License for more details.
//
//You should have received a copy of the GNU Lesser General Public
//License along with this library; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System;
using System.Data;
using System.Collections;
using System.Drawing;
namespace HH.WMS.Utils.Gios.Pdf
{
///
///
///
public class PdfTablePage : PdfObject
{
internal Hashtable cellAreas;
internal int startRow,endRow,columns;
internal string stream;
internal PdfArea area;
///
///
///
public PdfArea Area
{
get
{
return area;
}
}
internal PdfTablePage(int startRow,int endRow,int columns)
{
this.cellAreas=new Hashtable();
this.startRow=startRow;
this.endRow=endRow;
this.columns=columns;
}
///
/// returns the Area where the Cell has been rasterized.
///
///
///
///
public PdfArea CellArea(int Row,int Column)
{
object o=this.cellAreas[Row+","+Column];
if (o==null) throw new Exception("Cell ["+Row+","+Column+"] does not belong to the TablePage.");
return o as PdfArea;
}
internal void SetArea()
{
this.area=this.CellArea(startRow,0).Merge(this.CellArea(endRow,0));
double great=0;
foreach (PdfArea pa in this.cellAreas.Values)
{
double d=pa.BottomRightCornerX;
if(d>great) great=d;
}
this.area.BottomRightCornerX=great;
}
///
/// the index of the first Row of the rendered Table Page.
///
public int FirstRow
{
get
{
return this.startRow;
}
}
///
/// the index of the last Row of the rendered Table Page.
///
public int LastRow
{
get
{
return this.endRow;
}
}
///
/// returns true if the Table Contains the rendering of this Row Index.
///
///
///
public bool ContainsRow(int RowIndex)
{
if ((this.startRow<=RowIndex)&&(RowIndex<=this.endRow)) return true;
return false;
}
internal override int StreamWrite(System.IO.Stream stream)
{
int num=this.id;
string text=this.stream;
Byte[] part2;
if (PdfDocument.FlateCompression) part2=Utility.Deflate(text); else
part2=System.Text.ASCIIEncoding.ASCII.GetBytes(text);
string s1="";
s1+=num.ToString()+" 0 obj\n";
s1+="<< /Lenght "+part2.Length;
if (PdfDocument.FlateCompression) s1+=" /Filter /FlateDecode";
s1+=">>\n";
s1+="stream\n";
string s3="\nendstream\n";
s3+="endobj\n";
Byte[] part1=System.Text.ASCIIEncoding.ASCII.GetBytes(s1);
Byte[] part3=System.Text.ASCIIEncoding.ASCII.GetBytes(s3);
stream.Write(part1,0,part1.Length);
stream.Write(part2,0,part2.Length);
stream.Write(part3,0,part3.Length);
return part1.Length+part2.Length+part3.Length;
}
}
}